home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / comm / fido / ConvPktSrc.lha / ConvPkt / jblist.c < prev    next >
C/C++ Source or Header  |  1996-09-11  |  2KB  |  117 lines

  1. #include <exec/types.h>
  2.  
  3.  
  4. #include <clib/alib_protos.h>
  5. #include <clib/exec_protos.h>
  6. #include <clib/dos_protos.h>
  7.  
  8. struct jbList
  9. {
  10.    struct jbNode *First;
  11.    struct jbNode *Last;
  12. };
  13.  
  14. struct jbNode
  15. {
  16.    struct jbNode *Next;
  17. };
  18.  
  19. jbNewList(struct jbList *list)
  20. {
  21.    list->First=NULL;
  22.    list->Last=NULL;
  23. }
  24.  
  25. jbAddNode(struct jbList *list, struct jbNode *node)
  26. {
  27.    if(!list->First)
  28.       list->First=node;
  29.  
  30.    else
  31.       list->Last->Next=node;
  32.  
  33.    list->Last=node;
  34.    node->Next=NULL;
  35. }
  36.  
  37. jbFreeList(struct jbList *list,struct jbNode *firstnode,ULONG sizenode)
  38. {
  39.    struct jbNode *tmp,*tmp2;
  40.  
  41.    if(list->First==firstnode)
  42.    {
  43.       list->First=NULL;
  44.       list->Last=NULL;
  45.    }
  46.    else
  47.    {
  48.       for(tmp=list->First;tmp->Next!=firstnode;tmp=tmp->Next);
  49.  
  50.       tmp->Next=NULL;
  51.       list->Last=tmp;
  52.    }
  53.  
  54.    for(tmp=firstnode;tmp;)
  55.    {
  56.       tmp2=tmp->Next;
  57.       FreeMem(tmp,sizenode);
  58.       tmp=tmp2;
  59.    }
  60. };
  61.  
  62. jbFreeNum(struct jbList *list,ULONG num,ULONG size)
  63. {
  64.    struct jbNode *old=NULL,*tmp;
  65.    ULONG c;
  66.  
  67.    tmp=list->First;
  68.  
  69.    for(c=0;c<num && tmp;c++)
  70.    {
  71.       if(c==num-1)
  72.          old=tmp;
  73.  
  74.      tmp=tmp->Next;
  75.    }
  76.  
  77.    if(c==num)
  78.    {
  79.       if(old)
  80.          old->Next=tmp->Next;
  81.  
  82.       if(num==0)
  83.          list->First=tmp->Next;
  84.  
  85.       if(tmp->Next == NULL)
  86.          list->Last=old;
  87.  
  88.       FreeMem(tmp,size);
  89.    }
  90. }
  91.  
  92. jbFreeNode(struct jbList *list,struct jbNode *node,ULONG size)
  93. {
  94.    struct jbNode *old=NULL,*tmp;
  95.  
  96.    for(tmp=list->First;tmp;tmp=tmp->Next)
  97.    {
  98.       if(tmp->Next == node)
  99.          old=tmp;
  100.  
  101.       if(tmp == node) break;
  102.    }
  103.  
  104.    if(tmp == node)
  105.    {
  106.       if(old)
  107.          old->Next=tmp->Next;
  108.  
  109.       if(node == list->First)
  110.          list->First=tmp->Next;
  111.  
  112.       if(tmp->Next == NULL)
  113.          list->Last=old;
  114.  
  115.       FreeMem(tmp,size);
  116.    }
  117. }